﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

using System.Collections;     // skal bruges til IEnumerator

namespace Model
{
    /* I denne version er der indlagt en Controller, der skal holde styr på  Ordrer og varer.
     * Denne controller skal også sørge for, at gemme og slette data, derfor er de metoder og metodekald, der handler om at gemme og slette lagt i FrisørSystem.cs
     * VareCollection-klassen skal skunne serialiseres, derfor [Serializable]
     */

    [Serializable]
    public class VareCollection
    {
       // private const long STARTTAL = 1000;

        private List<Vare> varer;
       // private int cursor;

        public VareCollection()
        {
            varer = new List<Vare>();
        }

        // har fået returværdi fordi jeg skal bruge den til sessionControlleren
        public Vare TilfoejVare(long varenr, string betegnelse, double pris)
        {
            Vare nyVare = new Vare(varenr,betegnelse, pris); // varen genererer selv et varenr *** Ulla
            varer.Add(nyVare);
            return nyVare;
        }

   

        public List<long> GetVarenumre()
        {
            List<long> minListe = new List<long>();

            foreach (Vare aktuelVare in varer)
            {
                minListe.Add(aktuelVare.Varenr);
            }
            return minListe;
        }

        // Denne metode er overflødig man kan justere på aktuelVare i frisørsystem
        //public void JusterVare(long varenr, string betegnelse, double pris)
        //{
        //    Vare vare = FindVare(varenr);
        //    vare.Betegnelse = betegnelse;
        //    vare.Pris = pris;
        //}


        public Vare FindVare(long varenr)
        {
            foreach (Vare minVare in varer)
            {
                if (minVare.Varenr == varenr)
                {
                    return minVare;
                }
            }
            return null;
        }

        // Fjerner vare med varenr
        //ændret i forbindelse med indførelse af sessionvariable
        public void FjernVare(Vare vare)
        {
            varer.Remove(vare);
        }

        // Denne metode er overflødig man kan modtage varer på aktuelVare i frisørsystem
        //public uint ModtagVarer(long varenr, uint antal)
        //{
        //    Vare vare = FindVare(varenr);
        //    uint beholdning = vare.ModtagVarer(antal);
        //    return beholdning;
        //}

        public double VisLagerbinding()
        {
            double lagerbinding = 0.0;
            double varebinding;

            foreach (Vare vare in varer)
            {
                varebinding = vare.BeregnVarebinding();
                lagerbinding += varebinding;
            }
            return lagerbinding;
        }

        //public long FindStoersteVarenr()
        //{
        //    if (varer.Count() > 0)
        //    {
        //        return varer[varer.Count() - 1].Varenr;
        //    }
        //    else return STARTTAL; 
        //}

        public IEnumerator GetVareIterator()
        {
            return varer.GetEnumerator();  // varer (List<T> implementerer Ienumerator og kan derfor                                       //returnere den videre via metoden GetEnumerator()
        }

        #region iterator
        //// Her laver vi vores første iterator, der bruges til at sende varerne op til GUI én for en
        //// Vi bruger den for at skabe lav kobling. 
        //// Cursor er en global variabel, der hele tiden skal huske hvilket vareobjekt vi har sendt

        //// Sætter cursor til før første vare
        //public void Reset()
        //{
        //    cursor = -1;
        //}

        //// Returnerer aktuel vare
        //public Vare GetCurrent()
        //{
        //    return varer[cursor];
        //}

        //// flytter cursor én frem og returnerer om der er flere varer
        //public bool MoveNext()
        //{
        //    cursor++;
        //    return (cursor < varer.Count);
        //}


        #endregion
    }
}
